package views;

import helper.ColumnConfig;
import helper.TableModelHelper;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;

import utils.MessageBox;
import utils.StringUtil;
import controller.AdministradorProductos;
import dto.AreaDTO;
import dto.ProductoDTO;
import dto.ProductoStockDTO;

public class ProductoStock extends JFrame {
	
	private static final long serialVersionUID = 2467048390844744050L;
	
	protected Container contentPane;
	private Vector<String> columnNames;
	private List<ColumnConfig> columns;
	private Vector<Vector<String>> rows;
	
	private AreaDTO area;
	private List<ProductoDTO> productos;
	
	private JTable table;
	private TableModelHelper tableModel;
	private JScrollPane scrollPane;
	
	public ProductoStock(AreaDTO area, List<ProductoDTO> productos) {
		this.setSize(400, 250);
		this.setTitle("Stock por Producto");
		this.columnNames = new Vector<String>();
		this.columns = new ArrayList<ColumnConfig>();
		this.area = area;
		this.productos = productos;
		initGUI();
		loadData();
	}

	private void initGUI() {
		centered();
		contentPane = getContentPane();
		contentPane.setLayout(new BorderLayout());
		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setPreferredSize(new Dimension(500, 50));

	    JLabel lblSep = new JLabel("Productos");		
		JSeparator separator = new JSeparator();
		lblSep.setBounds(15, 15, getWidth()-40, 20);
		separator.setBounds(10, 35, getWidth()-40, 20);
		panel.add(lblSep);
		panel.add(separator);
		add(panel, BorderLayout.NORTH);
		
		//Tabla
		columns.add(new ColumnConfig("nombre", "Producto"));
		columns.add(new ColumnConfig("stock", "Stock"));
	    for (ColumnConfig columnConfig : columns) {
			columnNames.add(columnConfig.getLabel());
		}
	    
	    rows = new Vector<Vector<String>>();
	    tableModel = new TableModelHelper(columns);
	    tableModel.setDataVector(rows, columnNames);
	    table = new JTable(tableModel);
	    scrollPane = new JScrollPane(table);
	    scrollPane.setPreferredSize(new Dimension(260, 100));
	    add(scrollPane, BorderLayout.CENTER);
	}
	
	private void loadData() {
			// Productos
			rows.clear();
			try {
				List<ProductoStockDTO> prodStock = AdministradorProductos.getInstance().stockPorProductos(area, productos);
				for (ProductoStockDTO ps : prodStock) {
					Vector<String> data = new Vector<String>();
					data.add(ps.getProducto().getNombre());
					data.add(StringUtil.null2String(ps.getCantidad()));
					rows.add(data);
				}
				
				// Armo tabla nuevamente
				contentPane.remove(scrollPane);
				tableModel = new TableModelHelper(columns);
			    tableModel.setDataVector(rows, columnNames);
			    table = new JTable(tableModel);
			    scrollPane = new JScrollPane(table);
			    scrollPane.setPreferredSize(new Dimension(260, 100));
			    add(scrollPane, BorderLayout.CENTER);
			    contentPane.doLayout();
			} catch (Exception e) {
				MessageBox.Error("Error", "Surgio un error obteniendo los productos y su stock.");
			}
	}
	
	//Centra la ventana en medio de la pantalla
	private void centered() {
		Toolkit tk = Toolkit.getDefaultToolkit();
		Dimension screenSize = tk.getScreenSize();
	    int screenHeight = screenSize.height;
	    int screenWidth = screenSize.width;
	    setLocation(screenWidth / 4, screenHeight / 4);
	}

}
